package in.lib.holder.base; import in.lib.adapter.base.RobinAdapter; import in.lib.annotation.InjectView; import in.lib.manager.SettingsManager; import in.lib.utils.Views; import in.lib.view.AvatarView; import in.lib.view.LinkTouchMovementMethod; import in.lib.view.LinkifiedTextView; import in.lib.view.spannable.HashtagClickableSpan; import in.lib.view.spannable.MentionClickableSpan; import in.lib.view.spannable.UrlClickableSpan; import in.model.base.Message; import in.rob.client.MainApplication; import in.rob.client.R; import android.graphics.Typeface; import android.view.View; import android.widget.ImageView; import android.widget.ProgressBar; import android.widget.TextView; import com.nostra13.universalimageloader.core.ImageLoader; /** * View holder for list item which holds references * to the views so its like uber quick */ public class MessageHolder implements ViewHolder { @InjectView(R.id.title) public TextView title; @InjectView(R.id.sub_title) public TextView subTitle; @InjectView(R.id.time) public TextView time; @InjectView(R.id.text) public LinkifiedTextView text; @InjectView(R.id.avatar) public AvatarView avatar; @InjectView(R.id.video_play_button) public ImageView videoMediaButton; @InjectView(R.id.reply) public ImageView replyButton; @InjectView(R.id.reply_all) public ImageView replyAllButton; @InjectView(R.id.share) public ImageView shareButton; @InjectView(R.id.options_container) public View optionsContainer; @InjectView(R.id.location_container) public View locationContainer; @InjectView(R.id.media_container) public View mediaContainer; @InjectView(R.id.progress) public ProgressBar mediaProgress; public MessageHolder(View convertView) { Views.inject(this, convertView); } @Override public void onViewDestroyed(View v) { if (SettingsManager.isListAnimationEnabled()) { v.clearAnimation(); } avatar.setImageBitmap(null); ImageLoader.getInstance().cancelDisplayTask(avatar); } /** * Method to use when populating a view's members with the * data from post. * @param holder The holder containing the views * @param post The post object */ public void populate(Message post, RobinAdapter adapter) { title.setText(post.getPoster().getFormattedMentionName()[0]); subTitle.setText(post.getPoster().getFormattedMentionName()[1]); text.setText(post.getFormattedText()); if (SettingsManager.getSingleClickLinks() > 0) { String s = Integer.toBinaryString(SettingsManager.getSingleClickLinks()); Class[] c = new Class[s.length()]; int index = 0; if (!SettingsManager.isSingleClickHashtagEnabled()) { c[index++] = HashtagClickableSpan.class; } if (!SettingsManager.isSingleClickMentionEnabled()) { c[index++] = MentionClickableSpan.class; } if (!SettingsManager.isSingleClickUrlEnabled()) { c[index++] = UrlClickableSpan.class; } text.setLinkMovementMethod(new LinkTouchMovementMethod(c)); } else { text.setLinkMovementMethod(null); } time.setText(post.getDateStr()); if (SettingsManager.isCustomFontsEnabled()) { title.setTypeface(Typeface.defaultFromStyle(0)); subTitle.setTypeface(Typeface.defaultFromStyle(0)); text.setTypeface(Typeface.defaultFromStyle(0)); } if (SettingsManager.getShowAvatars()) { ImageLoader.getInstance().cancelDisplayTask(avatar); avatar.setVisibility(View.VISIBLE); avatar.setContentDescription(post.getPoster().getFormattedMentionName()[0]); if (post.getPoster().isAvatarDefault()) { avatar.setImageResource(R.drawable.default_avatar); } else { ImageLoader.getInstance().displayImage(post.getPoster().getAvatarUrl() + "?avatar=1&id=" + post.getPoster().getId(), avatar, MainApplication.getAvatarImageOptions()); } } else { avatar.setContentDescription(""); avatar.setVisibility(View.GONE); } } }